iT邦幫忙

2023 iThome 鐵人賽

DAY 1
1

前言

第一次參加鐵人賽好可怕,但為了激勵自己更深入地學習,我只能硬著頭皮向前推進!(一定要撐到最後阿!
接下來,我會以演算法與資料結構講解為主,透過經典題目,以及Leetcode Easy題型來加以輔助, 如有錯誤歡迎指教~
/images/emoticon/emoticon41.gif


先來說說演算法好了

什麼是演算法呢?/images/emoticon/emoticon06.gif
演算法其實不是一種程式語言,它在日常生活中無處不在,只是我們沒有察覺而已,以下是一些日常生活的例子:

  1. 烹飪 : 烹飪食物的過程本身就是一種演算法,它需要一系列的步驟才能完成。
    備菜 ⇒ 洗菜 ⇒ 加工 ⇒ 完成
    https://ithelp.ithome.com.tw/upload/images/20230916/20162567GaDp4CCY1L.png
  2. 路線規劃: 當你在使用導航(e.g. Google 地圖) 來抵達目的地時,它會幫你計算最短路線,甚至能夠根據路況找到最快抵達的路。
    https://ithelp.ithome.com.tw/upload/images/20230916/20162567WTAQz1KhVR.png

演算法其實是一門很古老的學問,像是如何生火、打獵、蓋金字塔等,人們總會使用演算法來達到目的。
所以到底什麼是演算法呢? 演算法簡單來說是一種以有限步驟的方法流程,用來解決特定問題或執行特定任務。簡單來說,演算法就是解決問題的方法流程。

而演算法有五個主要標準,通常被稱為「演算法的五個特性」,是指演算法應該具備以下特點:

  1. 有限性 (Finiteness): 在執行有限個步驟後必須能夠停止。

  2. 明確性(Definiteness):每個步驟都必須明確且精準,不能存在模棱兩可的描述。

  3. 輸入(Input): 必須有 >=0 個輸入資料。

  4. 輸出(Output): 至少要有 >=1個輸出結果。

  5. 有效性(Effectiveness):必須在合理的時間內完成,不會無限循環或延伸。


那什麼是資料結構呢?

資料結構是電腦演算法的建構基石,也資料結構是一個儲存資料的方式。
簡單來說,資料結構根據數據的特性以及數量,做最適合的安排,以便於執行特定的操作,如插入、刪除、搜索和排序。
資料結構的設計極大影響處理數據的效率,而根據操作特點分為不同類型。

資料結構的常見類型包含陣列(Array)、鏈結串列(Linked List)、堆疊(Stack)、佇列(Queue)、樹(Tree)、圖(Graph)、堆積(Heap)、雜湊表(Hash table)等,每種資料結構都有它的侷限性。

現在,讓我們舉一個生活中的例子來說明資料結構,假設你正在經營一家圖書館,你需要管理數千本書籍。

  • 陣列(Array):你可以將書籍按照它們在書架上的順序排列,每本書都有一個編號。這樣,當讀者要找到特定的書時,你可以根據編號快速找到它。
  • 鏈結串列(Linked List):假設你的圖書館需要管理讀者的借閱歷史記錄。每當一位讀者借閱一本書或歸還一本書,你都需要記錄這個事件,以便跟蹤讀者的活動。
  • 雜湊表(Hash table):如果你想根據書籍的標題快速查找,你可以建立一個雜湊表,將書籍標題映射到書籍的位置。這樣,只需知道標題,就可以快速找到對應的書籍。
  • 堆疊(Stack):你的圖書館有一個特殊的書架,只能展示一本書,而你希望始終在這個書架上展示最新到館的書籍。每當一本新書到達圖書館,你將它放在書架上的現有書籍的上方。當需要更換展示的書籍時,你只需取下書架頂部的書籍,然後放上新到館的書籍。
  • 佇列(Queue) : 假設你有一個等待借書的讀者隊列。每當一名讀者想要借一本書,你將他們加入到借書佇列的末尾。當一本書可以借給讀者時,你會從佇列的前端取出最先排隊的讀者,並交給他們一本書。這樣,確保了借書的公平性,因為最早等待的讀者會首先獲得書籍。
  • 樹(Tree) : 假設你的圖書館擁有大量書籍,每本書都可以根據不同的分類進行組織,例如按照作者、主題或類型。你可以使用樹的結構,其中每個節點代表一個分類,並包含了相關書籍的信息。
  • 圖(Graph) : 你可以使用圖結構來建立書籍之間的關聯性。每個節點代表一本書,而邊表示書籍之間的關聯,例如「相似主題」、「同一作者」或「推薦閱讀」。這樣的圖可以幫助讀者發現其他可能感興趣的書籍,並增強閱讀體驗。
  • 堆積(Heap):圖書館員的工作排程。每個節點代表一名圖書館員,並且每名員工有一個優先級,表示他們的能力或特殊技能。當需要分派任務時,你可以使用最小堆選擇具有最高優先級的員工,以確保最合適的員工處理特定工作。

Reference

書籍 :

  • U. Manber, Introduction to Algorithms: A Creative Approach. Braille Jymico Inc., 2004.

  • 資料結構 — 洪逸 編著

  • 演算法 — 洪捷 編著

科技助手:


不必因為進度落後而感到緊張,也別自責。每個人的旅程都是獨一無二的,前進的步伐也各不相同,最重要的是,勇於努力向前邁進。



下一篇
資料結構 — 陣列(Array)
系列文
30天冒險之旅: 資料結構與演算法筆記挑戰30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言